#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSerialPort/QSerialPort>
#include "global.h"
#include <QTextBrowser>
#include <QDateTime>
#include <QtSerialPort/QSerialPortInfo>
#include <QSettings>
#include <QFile>
#include <QCloseEvent>
#include <QByteArray>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    //自定义信号槽
    void onReadyRead();

private slots:
    void on_btnUpdateSerialPort_clicked();

    void on_btnConnectSerialPort_clicked();

    void on_btnToCheckState_clicked();

    void on_btnChanggePswd_clicked();

    void on_btnToUserState_clicked();

    void on_btnConfirmPswd_clicked();

    void on_btnChangePswd_clicked();

private:
    Ui::MainWindow *ui;

    //私有成员部分
    QSerialPort* m_serialPort;//串口指针

    //私有方法部分
    void init();//程序初始化函数
    void setSerialByUiInfo();//通过界面信息设置串口参数
    void printMsg(QTextBrowser* obj,QString msg,MSG_TYPE type);//打印日志信息,第一个参数是文本对象,第二个参数是文本信息,第三个参数是消息类型
    QString getCurrentTiem();//获取当前时间字符串,显示格式为 分分:秒秒
    void updateSerialPortList();//更新可用串口列表
    bool loadConfig(QString filePath);//加载配置文件
    void saveConfig(QString filePath);//保存配置文件
    void analysisCmd(QByteArray recData);//解析命令
    void setSerialSettingEnable(bool enable);//设置串口参数设置是否可调整
    unsigned char crc8(QByteArray arr,int len);

protected:
    void closeEvent(QCloseEvent* e);//重写程序关闭函数

};
#endif // MAINWINDOW_H
